/*
 * Noeud.cpp
 *
 *  Created on: 14 mars 2012
 *      Author: Administrator
 */

#include "Noeud.h"
#include <QList>
#include <QMapIterator>
#include <iostream>
static int cptNoeud = 0;

Noeud::Noeud():longueur(5),largeur(5),hauteur(5)
{
	map[A] = false;
	map[B] = false;
	map[C] = false;
	map[D] = false;
	map[E] = false;
	map[F] = false;
	map[G] = false;
	map[H] = false;
	id = ++cptNoeud;
}

Noeud::Noeud(float longueurIN,float largeurIN,float hauteurIN):longueur(longueurIN),largeur(largeurIN),hauteur(hauteurIN)
{
	map[A] = false;
	map[B] = false;
	map[C] = false;
	map[D] = false;
	map[E] = false;
	map[F] = false;
	map[G] = false;
	map[H] = false;
	id = ++cptNoeud;
}

bool operator==(Noeud const &n1,Noeud const &n2)
{
	return n1.id == n2.id;
}

std::ostream& operator<<( std::ostream &flux, Noeud const& n )
{
    flux << n.id << "/" << n.longueur << "/" << n.largeur  << "/" << n.hauteur  << std::endl;
    return flux;
}

Noeud::Sommet Noeud::getFaceDisponible() const
{
	QList<Noeud::Sommet> vectorFacesDispo;
	QMapIterator<Noeud::Sommet,bool> it(map);
	while(it.hasNext())
	{
		it.next();
		if(!it.value())
		{
			vectorFacesDispo.append(it.key());
		}
	}
	/*Si aucune face dispo on retourne Err*/
	if(vectorFacesDispo.isEmpty())
	{
		return Err;
		std::cout << "Err" << std::endl;
	}
	/*On genere un entier compris entre 0 et taille(vectorFacesDispo) -1*/
	else
	{
		int pos = static_cast<int>(rand() / static_cast<double>(RAND_MAX+1) * (vectorFacesDispo.size()) );
		return vectorFacesDispo.at(pos);
	}
}
